perm filename SIG.MAC[4,ALS] blob sn#054417 filedate 1973-07-19 generic text, type T, neo UTF8
00010	TITLE SIG
00020	
00030	ENTRY SIG
00040	
00050		;Signature table processing routine. July 16,1973.
00060		;Designed for 256 word tables.
00070	EXTERNAL 	USE,LRN,HINT,UPCNT
00080	EXTERNAL 	INDAT,INCNT,FLAG
00090	EXTERNAL	SEGC
00100	EXTERNAL	IN1,IN2,IN3,IN4,NAMES,OUTPUT,PARENT
00110	EXTERNAL	OUT1,OUT2,OUT3,OUT4,PHW,LRN1,LRN2,LRN3,LRN4
00120	EXTERNAL	LEVEL,CMAX,START,STOP
00130	EXTERNAL	CFLAG
00140	
00150	;Name	 	Contents of arrays used in SIG
00160	;PHLIST		6-bit name of phonette
00170	;FLIST		6-bit name of feature
00180	;HLIST		word with 1's at locations corresponding to feature index
00190	;PARENT		POINT word specifying field in an OUTPUT word of PARENT
00200	;IN1		POINT word to correct number of bits in an INDAT word
00210	;IN2		POINT word to correct number of bits in an INDAT word
00220	;IN3		POINT word to correct number of bits in an INDAT word
00230	;IN4		POINT word to correct number of bits in an INDAT word
00240	;OUT1		6-bit name of output Ph or Feature
00250	;OUT2		6-bit name of output Ph or Feature
00260	;OUT3		6-bit name of output Ph or Feature
00270	;OUT4		6-bit name of output Ph or Feature
00280	;LRN1		0 if OUT1 is a Ph or else HLIST type word
00290	;LRN2		0 if OUT2 is a Ph or else HLIST type word
00300	;LRN3		0 if OUT3 is a Ph or else HLIST type word
00310	;LRN4		0 if OUT4 is a Ph or else HLIST type word
00320	;LEVEL		4 fields with counter levels in range 0 th 511
00330	;CMAX		4 fields with maximum outputs during segment
00340	;START		4 fields with starting SEGC values (actually +1)
00350	;STOP		4 fields wsed to store indication of end of segment
00360	;OUTPUT		4 probability values for the 4 out properties
00370	
00380	
00390	;Index register assignments
00400	;Regester	Usage
00410	Z=0		; general purpose register
00420	I=1		;Used to index ITEMS IN HEADER TABLES
00430	J=2		;Used to index within  tables
00440	K=3		;Special purpose indexing and general use when Z not wanted
00450	L=4
00460	M1=5		;Used to hold counter bit
00470	M2=6		;Used for the 2nd field
00480	IN=7		;Used to hold start of INDAT array
00490	M3=10		;Used for the 3rh field
00500	M4=11		;Used for the 4th field
00510	S=12
00520	OU=13		;Reserved exclusively for start of output array
00530	T=14		;Used to index thru TABLES
00540	H=15		;Used to hold HINT word
00550	P=16		;Used to hold start of array PARENT
00560	X=17		;Used to index in buckets
00570	
00580	SIG:	0
00590		MOVEM	17,SAVE+17
00600		MOVE	17,[XWD 0,SAVE]
00610		BLT	17,SAVE+16
00620	
00630		SKIPE	FLAG
00640		JRST	A1		;Addrtss fields already set up
00650	
00660		MOVE	Z,IN1		;Start of array IN1
00670		HRRM	Z,IN1A		;Pre set address fields in progral
00680		HRRM	Z,IN1B
00690	
00700		MOVE	Z,IN2
00710		HRRM	Z,IN2A
00720		HRRM	Z,IN2B
00730	
00740		MOVE	Z,IN3
00750		HRRM	Z,IN3A
00760		HRRM	Z,IN3B
00770	
00780		MOVE	Z,IN4
00790		HRRM	Z,IN4A
00800		HRRM	Z,IN4B
00810	
00820		MOVE	Z,OUTPUT
00830		HRRM	Z,OUTA
00840		HRRM	Z,OUTB
00850		HRRM	Z,OUTC
00860		HRRM	Z,OUTD
00870	
00880		MOVE	Z,USE
00890		HRRM	Z,USEA
00900	
00910		MOVE	Z,LRN
00920		HRRM	Z,ADDM1
00930		HRRM	Z,ADDM2
00940		HRRM	Z,ADDM3
00950		HRRM	Z,ADDM4
00960	
00970		MOVE	Z,NAMES
00980		HRRM	Z,NAMA
00990	
01000		MOVE	Z,PARENT
01010		HRRM	Z,PARA
01020	
01030		MOVE	Z,OUT1
01040		HRRM	Z,OUT1A
01045		HRRM	Z,OUT1L
01050		MOVE	Z,LRN1
01060		HRRM	Z,LRN1A
01070	
01080		MOVE	Z,OUT2
01090		HRRM	Z,OUT2A
01095		HRRM	Z,OUT2L
01100		MOVE	Z,LRN2
01110		HRRM	Z,LRN2A
01120	
01130		MOVE	Z,OUT3
01140		HRRM	Z,OUT3A
01145		HRRM	Z,OUT3L
01150		MOVE	Z,LRN3
01160		HRRM	Z,LRN3A
01170	
01180		MOVE	Z,OUT4
01190		HRRM	Z,OUT4A
01195		HRRM	Z,OUT4L
01200		MOVE	Z,LRN4
01210		HRRM	Z,LRN4A
01220	
01230		MOVE	Z,LEVEL
01240		HRRM	Z,LEVELA
01250		HRRM	Z,LEVELB
01260		HRRM	Z,LEVELC
01270		HRRM	Z,LEVELD
01280	
01290		MOVE	Z,CMAX
01300		HRRM	Z,MAXCA
01310		HRRM	Z,MAXCB
01320		HRRM	Z,MAXCC
01330		HRRM	Z,MAXCD
01340	
01350		MOVE	Z,START
01360		HRRM	Z,STARTA
01370		HRRM	Z,STARTB
01380		HRRM	Z,STARTC
01390		HRRM	Z,STARTD
01400	
01410		MOVE	Z,STOP
01420		HRRM	Z,STOPA
01430		HRRM	Z,STOPB
01440		HRRM	Z,STOPC
01450		HRRM	Z,STOPD
01460	
01470		JRST	FINISH
01480	
01490	A1:	MOVE	IN,INDAT	;Required by MAKE made pointers
01500		MOVE	OU,OUTPUT
01510		MOVE	P,PARENT
01520		SETZ	I,
01530		SETZ	T,
01540		MOVSI	M1,1000
01550		MOVSI	M2,1
01560		MOVEI	M3,1000
01570		MOVEI	M4,1
01580	
01590	
01600	NAMA:	SKIPN	0(I)		;Set to first item in names array
01610		JRST	FINISH
01620	
01630	IN1A:	LDB	J,0(I)		;Concatenate for index to line
01640	IN2A:	LDB	K,0(I)		;IN address fields preset above
01650		LDB	L,IN2B		;To get shift value from IN2
01660		LSH	J,@L
01670		ADD	J,K
01680	IN3A:	LDB	K,0(I)
01690		LDB	L,IN3B
01700		JUMPE	L,A2
01710		LSH	J,@L
01720		ADD	J,K
01730	IN4A:	LDB	K,0(I)
01740		LDB	L,IN4B
01750		JUMPE	L,A2
01760		LSH	J,@L
01770		ADD	J,K
01780	A2:	ADD	J,T
01790		SKIPG	FLAG
01800		JRST	L1
01810	USEA:	MOVE	K,0(J)
01820	PARA:	MOVE	X,0(I)
01830		LDB	L,X
01840		SKIPN	X
01850		MOVEI	L,1000
01860	
01870		MOVEI	X,3
01880	CNT:	SKIPN	@OUT1L(X)
01885		JRST	CNT4		;Unused output field
01887		LDB	Z,POINTA(X)	;Get current output
01890		IMUL	Z,L		;Multiply by parent value
01900		LSH	Z,-11		;Divide by 512
01910		LDB	M1,OUTA(X)	;Retrieve older value
01920		DPB	Z,OUTA(X)	;Save  new value
01930		LDB	M3,MAXCA(X)	;This is used to test state
01940		LDB	M2,LEVELA(X)	;The preset counter level
01950		CAMGE	Z,M2
01960		JRST	CNT3		;Below threshold
01970	
01980		JUMPE	M3,CNT2		;Was in off state
01990		CAMLE	Z,M3		;In on state so save max
02000		DPB	Z,MAXCA(X)	;Save if larger
02010		JRST	CNT4
02020	
02030	CNT2:	CAMGE	M1,M2		;Was earlier one over
02040		JRST	CNT4		;No so through
02050	
02060		CAMGE	Z,M1		;Find larger
02070		MOVE	Z,M1
02080		DPB	Z,MAXCA(X)	;and save
02090		MOVE	Z,SEGC		;Get location
02095		SUBI	Z,1		;back 1
02100		DPB	Z,STARTA(X)	;and save
02110		JRST	CNT4
02120	
02130	CNT3:	JUMPE	M3,CNT4		;Already in off state
02140		CAML	M1,M2		;Test older one
02150		JRST	CNT4		;Not time to stop
02160		AOS	CFLAG		;Time to stop
02170		DPB	M3,STOPA(X)	;Stop flag
02180	
02190	CNT4:	SOJGE	X,CNT		;Go around again
02200	
02210		ADDI	T,400
02220		AOJA	I,NAMA
02230	
02240	L1:
02250	
02260	LRN1A:	SKIPE	K,0(I)
02270		JRST	FEAT1
02280	OUT1A:	MOVE	K,0(I)
02290		CAME	K,PHW
02300		JRST	LRN2A
02310	ADDM1:	ADDM	M1,0(J)
02320		JRST	LRN2A
02330	FEAT1:	AND	K,HINT
02340		JUMPN	K,ADDM1
02350	
02360	LRN2A:	SKIPE	K,0(I)
02370		JRST	FEAT2
02380	OUT2A:	MOVE	K,0(I)
02390		CAME	K,PHW
02400		JRST	LRN3A
02410	ADDM2:	ADDM	M2,0(J)
02420		JRST	LRN3A
02430	FEAT2:	AND	K,HINT
02440		JUMPN	K,ADDM2
02450	
02460	LRN3A:	SKIPE	K,0(I)
02470		JRST	FEAT3
02480	OUT3A:	MOVE	K,0(I)
02490		CAME	K,PHW
02500		JRST	LRN4A
02510	ADDM3:	ADDM	M3,0(J)
02520		JRST	LRN4A
02530	FEAT3:	AND	K,HINT
02540		JUMPN	K,ADDM3
02550	
02560	LRN4A:	SKIPE	K,0(I)
02570		JRST	FEAT4
02580	OUT4A:	MOVE	K,0(I)
02590		CAME	K,PHW
02600		JRST	LRNEX
02610	ADDM4:	ADDM	M4,0(J)
02620		JRST	LRNEX
02630	FEAT4:	AND	K,HINT
02640		JUMPN	K,ADDM4
02650	LRNEX:	ADDI	T,400
02660		AOJA	I,NAMA
02670	
02680	FINISH:	MOVE	17,[XWD SAVE,0]
02690		BLT	17,17
02700		JRA	16,1(16)
02710	
02720	
02730	SAVE:	BLOCK	20
02740	SUM:	Z
02750	
02760	
02770	POINTA:	POINT	9,K,8
02780	POINTB:	POINT	9,K,17
02790	POINTC:	POINT	9,K,26
02800	POINTD:	POINT	9,K,35
02810	
02820	OUTA:	POINT	9,0(I),8
02830	OUTB:	POINT	9,0(I),17
02840	OUTC:	POINT	9,0(I),26
02850	OUTD:	POINT	9,0(I),35
02860	
02870	IN1B:	POINT	3,0(I),11
02880	IN2B:	POINT	3,0(I),11
02890	IN3B:	POINT	3,0(I),11
02900	IN4B:	POINT	3,0(I),11
02910	
02920	LEVELA:	POINT	9,0(I),8
02930	LEVELB:	POINT	9,0(I),17
02940	LEVELC:	POINT	9,0(I),26
02950	LEVELD:	POINT	9,0(I),35
02960	
02970	MAXCA:	POINT	9,0(I),8
02980	MAXCB:	POINT	9,0(I),17
02990	MAXCC:	POINT	9,0(I),26
03000	MAXCD:	POINT	9,0(I),35
03010	
03020	STARTA:	POINT	9,0(I),8
03030	STARTB:	POINT	9,0(I),17
03040	STARTC:	POINT	9,0(I),26
03050	STARTD:	POINT	9,0(I),35
03060	
03070	STOPA:	POINT	9,0(I),8
03080	STOPB:	POINT	9,0(I),17
03090	STOPC:	POINT	9,0(I),26
03100	STOPD:	POINT	9,0(I),35
03110	
03111	OUT1L:	JRST	0(I)		;Address of OUT1
03112	OUT2L:	JRST	0(I)
03113	OUT3L:	JRST	0(I)
03114	OUT4L:	JRST	0(I)
03115	
03120		END